package com.wanke.controller;

import com.wanke.util.AliyunSmsUtil;
import com.wanke.util.RandomUtil;
import com.wanke.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.concurrent.TimeUnit;

/**
 * @program: aliyun-note-test
 * @ClassName TestController
 * @author: WXK
 * @create: 2023-11-12 19:51
 **/
@RestController
@Slf4j
public class TestController {


    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private AliyunSmsUtil aliyunSmsUtil;
    @GetMapping("/send/{phone}")
    public Result sendCode(@PathVariable String phone) {
        // 1. 从Redis中获取验证码
        String code = (String) redisTemplate.opsForValue().get(phone);
        log.info("获取到的验证码,{}", code);
        if (code == null) {
            // 2. 如果Redis中没有验证码记录，生成一个新的四位随机验证码
            String random = RandomUtil.getFourBitRandom();
            HashMap<String, Object> hashMap = new HashMap<>();
            hashMap.put("code", random);
            // 3. 将新生成的验证码存储在Redis中，设置有效期为5分钟
            redisTemplate.opsForValue().set(phone, random, 5, TimeUnit.MINUTES);
            // 4. 调用阿里云接口发送短信，将验证码发送给指定的手机号码
            boolean b = aliyunSmsUtil.sendSms(phone, hashMap);
            log.info("短信发送状态,{}", b);
            return Result.success("发送成功");
        } else {
            // 5. 如果Redis中已存在验证码，说明已经发送过验证码，返回一个成功的响应，提示用户不要重复发送
            return Result.success("请勿重复发送验证码");
        }
    }

}
